iT邦幫忙

2024 iThome 鐵人賽

DAY 22
0
Python

在AWS上進行物聯網與人工智慧實作系列 第 22

D22-Amazon API Gateway

  • 分享至 

  • xImage
  •  

Amazon API Gateway

目錄

Amazon API Gateway 簡介

API 是一種軟體機制,透過執行以下操作來簡化開發:

  • 抽象實作細節
  • 僅公開開發人員所需的物件或操作
  • 建立資訊提供者和資訊使用者的溝通方式

D15-HTTP 請求/回應格式這篇文章中有提到行政院即時新聞API規格,從這個API規格很清楚的可以解釋上述三點

欄位
endpoint https://opendata.ey.gov.tw/api/ExecutiveYuan/NewsEy
傳輸方式 GET
編碼 content-type: application/json; charset=utf-8

上傳參數規格

欄位 說明
Keyword 關鍵字
StartDate 起始日期,格式:yyyy/mm/dd
EndDate 結束日,格式:yyyy/mm/dd
MaxSize 返回最大筆數(最大輸出筆數:1000筆)
IsRemoveHtmlTag 是否過濾Html Tag

回傳欄位說明

欄位 說明
標題 文字
內容 文字
上版日期 文字,格式:yyyy-mm-dd
來源網址 文字,格式:URL

Amazon API Gateway 是一種全受管的服務,可讓開發人員輕鬆地建立、發佈、維護、監控和保護任何規模的 API。API 可作為應用程式的「前門」,以便從後端服務存取資料、商業邏輯或功能。使用 API Gateway 時,可以建立 RESTful API 和 WebSocket API,以啟用即時雙向通訊應用程式。API Gateway 支援容器化、無伺服器工作負載和 Web 應用程式。

API Gateway 負責處理有關接受和處理多達數十萬個並行 API 呼叫的所有工作,包括流量管理、CORS(Cross Orgin Resource Sharing) 支援、授權和存取控制、調節、監控和 API 版本管理。API Gateway 沒有最低費用或啟動成本。使用者為 API 呼叫和資料傳輸量支付費用,而使用 API Gateway 分級定價模型,可在 API 用量擴展時減少成本。

下圖是 AWS 官網所提供的 API Gateway 運作方式,在圖的左手邊很明顯的可以看出 API Gateway 可以作為串流、移動裝置、物聯網甚至是企業內部應用的服務入口;在圖中顯示透過 API Gateway Cache 降低延遲, Amazon CloudWatch 來記錄所有的呼叫記錄;而圖右邊則是顯示 API Gateway 所能串接的服務,不僅是 AWS 所提供的服務(計算、資料庫、串流服務等)也可以是公司內部自建的應用服務。

https://ithelp.ithome.com.tw/upload/images/20240829/20129510Bk6QT3a9zL.png
圖 1. API Gateway 運作方式(source:AWS)

API Gateway 類型

API Gateway主要提供兩類 API 呼叫:

  • RESTful API:使用 HTTP API 建置針對無伺服器工作負載和 HTTP 後端最佳化的 RESTful API。HTTP API 是建置僅需要 API 代理功能之 API 的最佳選擇。若開發者的 API 在單一解決方案中需要 API 代理功能和 API 管理功能,則 API Gateway 還將提供 REST API。
  • WEBSOCKET API:使用 WebSocket API 來建立即時雙向通訊應用程式,例如聊天應用程式和串流儀表板。API Gateway 會保持連線不中斷,以處理後端服務和用戶端之間的訊息傳輸。

早期一些 API,例如 SOAP 或 XML-RPC,對開發人員強加了嚴格的框架, REST API(也稱為 RESTful API 或 RESTful Web API)是符合 REST 架構風格設計原則​​的應用程式介面 (API) 。 REST API 提供了一種靈活、輕量級的方式來整合應用程式並連接微服務架構中的元件。電腦科學家 Roy Fielding 博士於 2000 年在博士論文中定義,REST 為開發人員提供了相對較高的靈活性、可擴展性和效率,基於這些原因,REST API 已成為連接微服務架構中的元件和應用程式的常用方法。

開發人員幾乎可以使用任何程式語言開發 REST API,並支援各種資料格式。唯一的要求是它們符合以下六個 REST 設計原則,也稱為架構限制。

  1. 統一介面 (Uniform interface):對相同資源的所有 API 請求都應該看起來相同,REST API 應確保同一份資料(例如使用者的姓名或電子郵件地址)僅屬於一個統一資源識別碼 (URI)。
  2. 解耦客戶端與伺服器 (Client-server decoupling):在 REST API設計中,客戶端和伺服器應用程式必須完全相互獨立。客戶端應用程式應該知道的唯一資訊是所請求資源的 URI;它不能以任何其他方式與伺服器應用程式互動。同樣,伺服器應用程式除了透過 HTTP 將請求的資料傳遞給客戶端應用程式外,不應修改客戶端應用程式。
  3. 無狀態 (Statelessness):REST API 是無狀態的,這意味著每個請求都需要包含處理它所需的所有資訊。換句話說,REST API 不需要事先建立任何伺服器端會話。伺服器應用程式不允許儲存與客戶端請求相關的任何資料。
  4. 可緩存性 (Cacheability):如果可能,資源應該可以在客戶端或伺服器端快取。伺服器回應還需要包含有關是否允許對所傳遞的資源進行快取的資訊。目標是提高客戶端的效能,同時提高伺服器端的可擴展性。
  5. 分層系統架構 (Layered system architecture):在 REST API 中,請求和回應經過不同的層。根據經驗,不要假設客戶端和伺服器應用程式直接相互連接。
  6. 按需編碼 (Code on demand (optional)):REST API 通常會傳送靜態資源,但在某些情況下,回應也可以包含可執行程式碼(例如 Java 小程式)。在這些情況下,程式碼應該只按需運行。

端點類型(Endpoint Type)
API Gateway Endpoint Type 有分為三種,分別是:

  • edge optimized:會將要求路由到最靠近使用者的 CloudFront edge 節點,可取得最低的 latency。
  • regional:適用於相同地區的用戶端。
  • private:僅能從 Amazon Virtual Private Cloud (VPC) 透過界面 VPC 端點存取的 API 端點;此端點是您在 VPC 中建立的端點網路界面 (ENI)。

比較 REST APIs 和 HTTP APIs

端點類型(Endpoint type)

端點類型 REST API HTTP API
邊緣最佳化
區域性
私有

安全(Security)
API Gateway 提供多種方法來保護您免API受特定威脅的攻擊,例如惡意行為者或流量高峰。

安全性功能 REST API HTTP API
相互TLS認證
後端身分驗證的憑證
AWS WAF

授權(Authorization)
API Gateway 支援多種機制來控制和管理您的API。

授權選項 REST API HTTP API
IAM
資源政策
Amazon Cognito 是1
具有 AWS Lambda 功能的自定義授權
JSON網絡令牌(JWT)2
1 可以將 Amazon Cognito 與 JWT 授權者(JWT authorizer)一起使用
2 可以在 REST APIs 中使用 Lambda 授權程式(Lambda authorizer)來驗證 JWTs

API管理(API management)

選擇是否 REST APIs 需要API金鑰和每個用戶端速率限制等API管理功能。

功能 REST API HTTP API
自訂網域
API鑰匙
個別用戶端速率限制
個別用戶端使用量限制

整合(Integrations)
整合將 API Gateway 連接後端資源。

功能 REST API HTTP API
公用HTTP端點
AWS 服務
AWS Lambda 函數
與 Network Load Balancer 的私有整合
與 Application Load Balancer 的私有整合
私人整合 AWS Cloud Map
模擬整合

API Gateway 的開發-REST API

在 Amazon API Gateway 中,建立一個稱 REST API 時,就是建立為一堆資源的集合。如下圖所示, getbiao 是一個 REST API,裡面包含了兩個資源:chufashu 與 postdb,而每個資源實體下可以有一或多個方法(GET),這些方法都是標準的 HTTP 協定所定義的方法,如 get,post,put,options 等,

https://ithelp.ithome.com.tw/upload/images/20240829/20129510Pj7v6slfpe.png
圖 2. API Gateway - REST API 結構

而如同標準 Web API 一樣,API Gateway 的也包含了 request/response,只是基於整合後端 AWS 資源考量,API Gateway 的 REST API 方法分成了四個階段:

  • 方法請求 (Method Request):定義了用於客戶端訪問時所定義的 API 規格。
  • 整合請求 (Integration Request):要與後端端點 (如 Mock Endpoint、Lambda Function、AWS Service、其他 HTTP endpoint) 整合,需要透過整合請求,這會將傳入的要求轉送至指定的整合端點 URI。如有必要,可以轉換請求參數或請求主體以滿足後端要求。
  • Integration Response:這個階段可以將回傳的資料做轉換,用來設定不同的 status code 會需要 mapping 到的 header value。
  • Method Response:表示用戶端收到的要求回應。

為了協助客戶瞭解開發者所設計的 API,也可以在 API 建立過程中或建立之後提供 API 文件。若要啟用此功能,請為支援的 API 新增 Documentation 資源;若要控制用戶端呼叫 API 的方式,可以在**授權者(Authorizers)選項請使用 IAM 許可、Lambda 授權者或 Amazon Cognito 使用者集區;要計算 API 使用情況,請設置使用計劃(Usage plans)**選項以限制API請求。如下圖所示。

https://ithelp.ithome.com.tw/upload/images/20240829/20129510eZedI2odIZ.png
圖 3. API Gateway - REST API 其他功能

參考資料


上一篇
D21-實驗:使用 Amazon S3建立靜態網站
下一篇
D23-實驗:建立 API Gateway-using mock
系列文
在AWS上進行物聯網與人工智慧實作30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言